﻿using System;
using System.Configuration;
using System.Diagnostics;
using System.Drawing;
using System.IO;
using System.Net;
using System.Text;

namespace HueLampStatusDetector.PhilipsHue
{
    public class HueControl
    {
        private const string MessageBody = @"
{{
    ""hue"": {0},
    ""on"": true,
    ""bri"": 200
}}";
        private const int RedCode = 50;
        private const int GreenCode = 26000;

        public void SetColor(Color color)
        {
            if (color != Color.Red
                && color != Color.Green)
            {
                throw new ArgumentException("Color is not supported", "color");
            }
            try
            {
                byte[] messageContent = UTF8Encoding.UTF8.GetBytes(string.Format(MessageBody,
                    color == Color.Red ? RedCode : GreenCode));
                WebRequest request = WebRequest.Create(new Uri(
                                        string.Format("http://{0}/api/{1}/lights/{2}/state",
                                        ConfigurationManager.AppSettings["hueIP"],
                                        ConfigurationManager.AppSettings["hueUser"],
                                        ConfigurationManager.AppSettings["hueNumber"])));
                request.Method = "PUT";
                request.Timeout = 10000;
                request.ContentType = "application/json";
                request.ContentLength = messageContent.Length;
                using (Stream stream = request.GetRequestStream())
                {
                    stream.Write(messageContent, 0, messageContent.Length);
                }
            }
            catch (Exception ex)
            {
                Trace.TraceError(ex.Message);
            }
        }
    }
}